package day22;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

//可周期定长线程池
public class Demo4 {
    public static void main(String[] args) {
        //1.测试基础功能（定长功能）
//        ExecutorService es= Executors.newScheduledThreadPool(3);
//        for (int i=0;i<10;i++){
//            es.execute(()->{
//                System.out.println(Thread.currentThread().getName());
//            });
//        }
//        es.shutdown();
        //2.测试延迟功能（首次延迟时间） 通过子类new子类
//        ScheduledExecutorService ses=Executors.newScheduledThreadPool(3);
////        ses.schedule(Runnable类型,首次延迟时间,时间单位);
//        for (int i=0;i<10;i++){
//            ses.schedule(()->{
//               System.out.println(Thread.currentThread().getName());
//            },5, TimeUnit.SECONDS);
//        }
//        ses.shutdown();
        //3.测试周期功能功能（每隔一段时间都会执行）

        ScheduledExecutorService ses=Executors.newScheduledThreadPool(3);
        //ses.scheduleAtFixedRate(Runnable类型,首次延迟的时间,周期时间,时间单位);
        ses.scheduleAtFixedRate(()->{
            System.out.println(Thread.currentThread().getName());
        },3,5,TimeUnit.SECONDS);
    }
}


//通过可周期定长线程池完成：燃放烟花的过程
//首先点燃引线5s,之后每隔2秒发射一个烟花，一个有12个
//最后发射完毕，打印新年快乐

class Demo8{
    //定义一个计数器，统计燃放烟花的个数
//    static volatile int count;
    //线程安全的计数器
    static AtomicInteger count=new AtomicInteger(0);
    public static void main(String[] args) {
         ScheduledExecutorService ses=Executors.newScheduledThreadPool(1);
         System.out.println("点燃了烟花的引线！");
         ses.scheduleAtFixedRate(()->{
             count.getAndIncrement();  //加1
             System.out.println("正在发射第"+count.get()+"枚烟花");
         },5,2,TimeUnit.SECONDS);
         //可见性
         while (count.get()<12){}
         System.out.println("新年快乐！");
         ses.shutdown();
    }
}